
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>

// 函数声明
double calculate(double num1, double num2, char operator);
void print_welcome();
void print_result(double result);
int is_valid_operator(char c);

int main() {
    char input[100];
    double num1, num2, result;
    char operator;
    
    print_welcome();
    
    while (1) {
        printf("\n请输入表达式 (例如: 3.5 + 2) 或输入 'exit' 退出: ");
        
        // 读取用户输入
        if (fgets(input, sizeof(input), stdin) == NULL) {
            printf("读取输入失败，程序退出。\n");
            break;
        }
        
        // 去除换行符
        input[strcspn(input, "\n")] = '\0';
        
        // 检查退出命令
        if (strcmp(input, "exit") == 0 || strcmp(input, "quit") == 0) {
            printf("感谢使用计算器，再见！\n");
            break;
        }
        
        // 解析表达式
        if (sscanf(input, "%lf %c %lf", &num1, &operator, &num2) == 3) {
            // 验证操作符
            if (!is_valid_operator(operator)) {
                printf("错误: 无效的操作符 '%c'。请使用 +, -, *, / 中的一个。\n", operator);
                continue;
            }
            
            // 检查除零错误
            if (operator == '/' && num2 == 0) {
                printf("错误: 除数不能为零！\n");
                continue;
            }
            
            // 计算结果
            result = calculate(num1, num2, operator);
            print_result(result);
        } else {
            printf("错误: 输入格式不正确。请使用格式: 数字 操作符 数字\n");
            printf("示例: 3.5 + 2 或 10 / 5\n");
        }
    }
    
    return 0;
}

// 计算函数
double calculate(double num1, double num2, char operator) {
    switch (operator) {
        case '+':
            return num1 + num2;
        case '-':
            return num1 - num2;
        case '*':
            return num1 * num2;
        case '/':
            return num1 / num2;
        default:
            return 0.0; // 应该不会到达这里
    }
}

// 验证操作符
int is_valid_operator(char c) {
    return c == '+' || c == '-' || c == '*' || c == '/';
}

// 欢迎信息
void print_welcome() {
    printf("================================\n");
    printf("     C 语言命令行计算器\n");
    printf("================================\n");
    printf("支持操作: 加法(+), 减法(-), 乘法(*), 除法(/)\n");
    printf("使用示例: 3.5 + 2\n");
    printf("输入 'exit' 或 'quit' 退出程序\n");
}

// 打印结果
void print_result(double result) {
    printf("= %.6f\n", result);
    // 如果是整数，打印整数形式
    if (result == (int)result) {
        printf("= %d\n", (int)result);
    }
}
